package com.naiterui.ehp.bs.patient.validation;

import org.slf4j.Logger;

import com.naiterui.ehp.bp.domain.ConsultSession;
import org.slf4j.LoggerFactory;
import com.naiterui.ehp.bs.patient.exception.ExceptionCodes;
import com.naiterui.ehp.bs.patient.utils.exception.PatientBusinessException;

/**
 * 问诊记录信息检验工具类
 * @author Amber
 * @since 1.0.0
 */
public class ConsultSessionValidation {

    private static final Logger LOGGER = LoggerFactory.getLogger(ConsultSessionValidation.class);

    /**
     * 问诊记录是否存在
     * ConsultSessionValidation.existValidate()
     * @Author Amber
     * @Date 2016年2月27日
     * @since 1.0.0
     * @param session
     * @param operationInfo 操作信息
     * @throws PatientBusinessException
     */
    public static void existValidate(ConsultSession session, String operationInfo, Object... arguments) throws PatientBusinessException {
        if (session == null || session.getId() == null) {
            LOGGER.error(operationInfo + "consult not exist!", arguments);
            throw new PatientBusinessException(ExceptionCodes.CONSULT_NOT_EXIST);
        }
    }

    /**
     * 问诊存在且已结束
     * ConsultSessionValidation.endValidate()
     * @Author Amber
     * @Date 2016年2月27日
     * @since 1.0.0
     * @param session
     * @param operationInfo 操作信息
     * @throws PatientBusinessException
     */
    public static void endValidate(ConsultSession session, String operationInfo, Object... arguments) throws PatientBusinessException {
        // 问诊记录存在
        existValidate(session, operationInfo);
        if (session.getEndTime() == null) {
            LOGGER.error(operationInfo + " ; consult not end!", arguments);
            throw new PatientBusinessException(ExceptionCodes.CONSULT_NOT_END);
        }
    }

    /**
     * 问诊归属患者校验
     * ConsultSessionValidation.belongValidate()
     * @Author Amber
     * @Date 2016年2月27日
     * @since 1.0.0
     * @param session
     * @param patientId
     * @param operationInfo 操作信息
     * @throws PatientBusinessException
     */
    public static void belongValidate(ConsultSession session, Long patientId, String operationInfo, Object... arguments)
            throws PatientBusinessException {
        if (session.getPatientId() == null || !session.getPatientId().equals(patientId)) {
            LOGGER.error(operationInfo + " ; consult not belong to patient!", arguments);
            throw new PatientBusinessException(ExceptionCodes.CONSULT_NOT_BELONG_TO_PATIENT);
        }
    }

    /**
     * 问诊评价校验。<P>
     * 问诊记录存在，已结束且属于当前患者的问诊
     * ConsultSessionValidation.validateForAppraise()
     * @Author Amber
     * @Date 2016年2月27日
     * @since 1.0.0
     * @param session
     * @param patientId
     * @param operationInfo 操作信息
     * @throws PatientBusinessException
     */
    public static void validateForAppraise(ConsultSession session, Long patientId, String operationInfo, Object... arguments)
            throws PatientBusinessException {
        // 是否结束
        endValidate(session, operationInfo, arguments);
        // 归属患者校验
        belongValidate(session, patientId, operationInfo, arguments);
    }

}
